package org.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        // [3,9,20,null,null,15,7],
        TreeNode treeNode = new TreeNode(3);

        treeNode.left = new TreeNode(9);
        treeNode.right = new TreeNode(20);
        treeNode.right.left = new TreeNode(15);
        treeNode.right.right = new TreeNode(7);
        int[] ints = levelOrder(treeNode);
        System.out.println(Arrays.toString(ints));
    }

    public static int[] levelOrder(TreeNode root) {
        // 如果根节点为空，返回一个空数组
        if (root == null) {
            return new int[0];
        }
        // 创建一个队列，将根节点加入队列
        Queue<TreeNode> queue = new LinkedList<TreeNode>() {{
            add(root);
        }};
        // 创建一个ArrayList用于存储层序遍历的结果
        ArrayList<Integer> ans = new ArrayList<>();
        // 当队列为空时，遍历完成
        while (!queue.isEmpty()) {
            // 从队列中取出一个节点，将其值加入结果ArrayList
            TreeNode node = queue.poll();
            ans.add(node.val);
            // 检查其左右子节点是否为空，如果不为空则将它们加入队列
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
        }
        // 将结果ArrayList中的元素复制到一个新的int数组中并返回
        int[] res = new int[ans.size()];
        for (int i = 0; i < ans.size(); i++) {
            res[i] = ans.get(i);
        }
        return res;
    }

}
